﻿Imports System.Reflection

''' <summary>
''' 特殊値属性
''' </summary>
''' <remarks>
''' 単独では常にクリーン（ダーティでない）と評価されます。
''' ただし、自身以外にダーティなプロパティが存在する場合、自身は常にダーティとして扱われます。
''' </remarks>
<AttributeUsage(AttributeTargets.Class Or AttributeTargets.Property, Allowmultiple:=False)>
Public MustInherit Class SpecialValueAttribute
    Inherits Attribute

    ''' <summary>
    ''' ハードコード
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks>
    ''' 値を指定した場合、プロパティ値を使用せずにハードコード埋め込みます。
    ''' 主に命令文を指定します。
    ''' <code>HardCode:="CURRENT_TIMESTAMP"</code>
    ''' </remarks>
    Public Overridable ReadOnly Property HardCode() As String
        Get
            Return Nothing
        End Get
    End Property

    ''' <summary>
    ''' ハードコードかどうか示します
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overridable ReadOnly Property IsHardCode As Boolean
        Get
            Return False
        End Get
    End Property

    ''' <summary>
    ''' バージョンキーかどうかを示します
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overridable ReadOnly Property IsVersionKey As Boolean
        Get
            Return False
        End Get
    End Property

    ''' <summary>
    ''' 更新時、書き込み対象とするかどうかを示します
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Overridable Property IsUpdateTrigger As Boolean 

    ''' <summary>
    ''' 値読み込みイベントを発生させます
    ''' </summary>
    ''' <param name="instance"></param>
    ''' <param name="prop"></param>
    ''' <param name="oldValue"></param>
    ''' <remarks></remarks>
    Public Overridable Sub RaiseSaveValueReadingEvent(instance As Object, prop As LiteralProperty, oldValue As Object)
        Return
    End Sub
End Class
